package lc;
import java.util.*;
import org.junit.*;
public class Ex350 {
    class Solution1 {
        public int[] intersect(int[] nums1, int[] nums2) {
            Map<Integer, Integer> map = new HashMap<>();
            for (int n: nums1) {
                map.put(n, map.getOrDefault(n, 0) + 1);
            }
            Map<Integer, Integer> tmp = new HashMap<>();
            for (int n: nums2) {
                Integer v = map.get(n);
                if (v != null) {
                    v--;
                    if (v < 0) {
                        map.remove(n);
                    } else {
                        map.put(n, v);
                    }
                }
            }
            List<Integer> res = new ArrayList<>();
            for (int n: map.keySet()) {
                if (map.get(n) == 0) {
                  for (int i = 0; i < tmp.get(n); i++) {
                      res.add(n);
                  }
                }
            }
            return res.stream().mapToInt(Integer::valueOf).toArray();
        }
    }

    class Solution {
        public int[] intersect(int[] nums1, int[] nums2) {
            Map<Integer, Integer> map1 = new HashMap<>();
            for (int n: nums1) {
                map1.put(n, map1.getOrDefault(n, 0) + 1);
            }
            Map<Integer, Integer> map2 = new HashMap<>();
            for (int n: nums2) {
                map2.put(n, map2.getOrDefault(n, 0) + 1);
            }
            List<Integer> res = new ArrayList<>();
            for (int n: map1.keySet()) {
                Integer t = map2.get(n);
                if (t != null) {
                    int min = Math.min(map1.get(n), t);
                    for (int i = 0; i < min; i++) {
                        res.add(n);
                    }
                }
            }
            return res.stream().mapToInt(Integer::valueOf).toArray();
        }
    }

    // @Test
    // public void test() {
    //     Solution s = new Solution();
    //     int[] nums = new int[]{};
        
    // }
}
